package main

import (
	"flag"
	"fmt"
	"log"
	"os"

	"generator-tool/config"
	"generator-tool/internal/generator"

	"gopkg.in/yaml.v2"
)

func main() {
	configFile := flag.String("config", "config/generator.yaml", "配置文件路径")
	templateDir := flag.String("template", "templates", "模板目录路径")
	flag.Parse()

	// 检查配置文件是否存在
	if _, err := os.Stat(*configFile); os.IsNotExist(err) {
		log.Fatalf("配置文件不存在: %s", *configFile)
	}

	// 检查模板目录是否存在
	if _, err := os.Stat(*templateDir); os.IsNotExist(err) {
		log.Fatalf("模板目录不存在: %s", *templateDir)
	}

	// 加载配置
	cfg, err := loadConfig(*configFile)
	if err != nil {
		log.Fatalf("加载配置文件失败: %v", err)
	}

	// 可选：设置模板目录
	generator.SetTemplateDir(*templateDir)

	// 或者直接传递模板目录给构造函数
	codeGen, err := generator.NewCodeGenerator(cfg, *templateDir)

	if err != nil {
		log.Fatalf("创建代码生成器失败: %v", err)
	}
	defer codeGen.Close()

	// 生成代码
	if err := codeGen.GenerateAll(); err != nil {
		log.Fatalf("生成代码失败: %v", err)
	}

	fmt.Println("🎉 代码生成完成！🎉")
}

func loadConfig(filename string) (*config.GeneratorConfig, error) {
	data, err := os.ReadFile(filename)
	if err != nil {
		return nil, fmt.Errorf("读取配置文件失败: %v", err)
	}

	var cfg config.GeneratorConfig
	if err := yaml.Unmarshal(data, &cfg); err != nil {
		return nil, fmt.Errorf("解析配置文件失败: %v", err)
	}

	return &cfg, nil
}
